<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>props</title>
  </head>
  <div id="app"></div>

  <body>
    <script src="../../public/js/react.development.js"></script>
    <script src="../../public/js/react-dom.development.js"></script>
    <script src="../../public/js/babel.min.js"></script>
    <script type="text/babel">
      class Person extends React.Component {
        StringRef = () => {
          const { isHello } = this.state;
          this.setState({ isHello: !isHello });
        };
        state = {
          isHello: false,
        };
        render() {
          const { isHello } = this.state;
          return (
            <div
              ref={(c) => {
                this.hello = c;
                {
                  /* 
										这样写每次下面这行代码会执行两次
										第一次c输出为null，第二次为DOM本身
										这是因为在每次渲染时会创建一个新的函数实例，所以 React 清空旧的 ref 并且设置新的。
										通过将 ref 的回调函数定义成 class 的绑定函数的方式可以避免上述问题，但是大多数情况下它是无关紧要的。
									*/
                }
                console.log("e", c);
              }}
              onClick={this.StringRef}
            >
              {isHello ? "hello" : "hi"}
            </div>
          );
        }
      }
      ReactDOM.render(<Person />, document.getElementById("app"));
    </script>
  </body>
</html>
